<?php

namespace App\Http\Controllers\GarbageCollect;

use App\Models\Garbage\GarbageEvent;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Validator;
use DB;

/**
 * @group 垃圾分类->监督反馈->问题反馈列表>反馈详情页
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */
class GarbageEventsController extends Controller
{
    /**
     * 信息展示
     * @queryParam id 问题编号.
     * @queryParam title 反馈标题.
     * @queryParam desc 内容提要.
     * @queryParam user 反馈人.
     * @queryParam area 区域.
     * @queryParam address 详细地址.
     * @queryParam created 提交时间.
     * @queryParam status 状态. 1已反馈 2 已处理 3 处理中 4. 待处理
     * @queryParam single_file  附加图片 视频 语言 各一个 字段中 type 1 图片 2. 视频 3. 语音
     *
     * @bodyParam search string optional 搜索用户名(模糊查询)
     * @bodyParam admin_id int optional 负责人id号(筛选)
     */
    public function index(Request $request)
    {
        $query = GarbageEvent::with("user")->with('singleFile')->with('admin')->with('area');
        $query->where(function ($q) use ($request) {
            $request->has('admin_id') && $q->where('admin_id', $request->get('admin_id'));
        });
        $query->whereHas('user', function ($q) use ($request) {
            $request->has('search') && $q->where('wechat_name', "LIKE", "%{$request->get('search')}%");
        });
        $data = $query->paginate($request->input('per_page',10));
        $dataArr = $data->toArray();

        foreach ($dataArr['data'] as $k=>$v){
            if($v['anonymous'] === 1){
                $dataArr['data'][$k]['user']['nickname'] = '匿名用户';
                $dataArr['data'][$k]['user']['openid'] = '匿名用户';
            }
            //把视频音频文件遍历出来
            $typeArr = array();
            foreach ($v['single_file'] as $key=>$val){
                if((in_array($val['file']['type'],$typeArr)) | !in_array($val['file']['type'],[1,2,3])){
                    unset($dataArr['data'][$k]['single_file'][$key]);
                }else{
                    array_push($typeArr,$val['file']['type']);
                }
            }
        }
        return response()->json(encodeMsg($dataArr, 200), 200);
    }

    /**
     * 信息展
     * @queryParam id 问题编号.
     * @queryParam title 反馈标题.
     * @queryParam desc 内容提要.
     * @queryParam user 反馈人.
     * @queryParam area 区域.
     * @queryParam address 详细地址.
     * @queryParam created 提交时间.
     * @queryParam status 状态. 1已反馈 2 已处理 3 处理中 4. 待处理
     * @queryParam single_file  附加所有图片 视频 语言  字段中 type 1 图片 2. 视频 3. 语音
     *
     */
    public function show($pk)
    {
        $data = GarbageEvent::with('user')->with('admin')->with('area')->with('images')->find($pk);
        if ($data == []) {
            return response()->json(encodeMsg(["message" => "没有该信息"], 404), 404);
        } else {
            return response()->json(encodeMsg($data, 200), 200);
        }
    }

//
//    /**
//     * 信息添加
//     *
//     * @queryParam title  反馈标题.
//     * @queryParam desc   内容提要.
//     * @queryParam user_id   反馈人.
//     * @queryParam admin_id   负责人.
//     * @queryParam area_id   地区.
//     * @queryParam address   详细地址.
//     * @queryParam status   状态. 1已反馈 2 已处理 3 处理中 4. 待处理
//     *
//     * @bodyParam title string required 标题
//     * @bodyParam desc string required 内容提要.
//     * @bodyParam user_id int required 反馈人.
//     * @bodyParam admin_id int optional 负责人.
//     * @bodyParam area_id int required 地区.
//     * @bodyParam address string required 详细地址.
//     * @bodyParam status int required 状态. 1已反馈 2 已处理 3 处理中 4. 待处理
//     * @bodyParam files string optional 订单回收相关文件id串 如果只有一个文件 上传 1 如果多个 使用逗号隔开 1,2,3,4,5 特别注图片id必须是已经调用图片接口添加好了的
//     */
//
//    public function store(Request $request)
//    {
//        $e = genValidate();
//        $validator = Validator::make($request->all(),$e);
//        if($validator->fails()){
//            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
//        }
//
//
//        $data = GarbageEvent::create($request->all());
//
//        if($request->has('files')){
//            $file_data = [];
//            $fileArr = explode(',',$request->get('files'));
//            foreach ($fileArr as $k=>$value){
//                $tmp = [];
//                $tmp['file_id'] = $value;
//                $tmp['event_id'] = $data->id;
//                array_push($file_data,$tmp);
//            }
//            try{
//                GarbageEventFiles::insert($file_data);
//            }catch (\Exception $e){
//                return response()->json(encodeMsg(["message" => "请先确认图片是否已经添加"],404), 404);
//            }
//
//        }
//        return response()->json(encodeMsg($data,201), 201);
//    }

//    /**
//     * 信息更新
//     * @queryParam title 反馈标题.
//     * @queryParam desc 内容提要.
//     * @queryParam user_id 反馈人.
//     * @queryParam admin_id 负责人.
//     * @queryParam area_id 地区.
//     * @queryParam address 详细地址.
//     * @queryParam status 状态. 1已反馈 2 已处理 3 处理中 4. 待处理
//     *
//     * @bodyParam title string optional 标题
//     * @bodyParam desc string optional 内容提要.
//     * @bodyParam user_id int optional 反馈人.
//     * @bodyParam admin_id int optional 负责人.
//     * @bodyParam area_id int optional 地区.
//     * @bodyParam address string optional 详细地址.
//     * @bodyParam status int optional 状态. 1已反馈 2 已处理 3 处理中 4. 待处理
//     * @bodyParam reward float optional 奖励金额
//     * @bodyParam reward_type int optional 奖励金额的类型 1积分 2.红包
//     * @bodyParam files string optional 订单回收相关文件id串 如果只有一个文件 上传 1 如果多个 使用逗号隔开 1,2,3,4,5 特别注图片id必须是已经调用图片接口添加好了的
//     *
//     */
//    public function update(Request $request, $pk)
//    {
//
//        $e = genValidate();
//        $validator = Validator::make($request->all(), $e);
//        if ($validator->fails()) {
//            return response()->json(encodeMsg($validator->errors()->messages(), 400), 400);
//        }
//        $data = GarbageEvent::find($pk);
//        if ($data == []) {
//            return response()->json(["message" => "没有该信息"], 404);
//        }
//        try {
//            //奖励和奖励类型必须都要才能发送奖励
//            if ($request->has('reward') or $request->has('reward_type')) {
//                if (!($request->has('reward') and $request->has('reward_type'))) {
//                    return response()->json(["message" => "必须同时提交奖励的金额和奖励的类型"], 400);
//                }
//                if ($data->is_reward == 1) {
//                    return response()->json(["message" => "奖励已经发放"], 400);
//                }
//                $user = GarbageTestUser::find($data->user_id);
//                if ($user == []) {
//                    return response()->json(["message" => "发放奖励的用户不存在"], 400);
//                }
//
//                if ($request->get('reward_type') == 1) {
//                    $user->point = $user->point + $request->get('reward');
//                    $user->accumulation_point = $user->accumulation_point + $request->get('reward');
//                    $user->save();
//                    $data->is_reward = 1;
//                }
//            }
//            $data->update($request->all());
//            if($request->has('files')){
//                $file_data = [];
//                $fileArr = explode(',',$request->get('files'));
//                foreach ($fileArr as $k=>$value){
//                    $tmp = [];
//                    $tmp['file_id'] = $value;
//                    $tmp['event_id'] = $data->id;
//                    array_push($file_data,$tmp);
//                }
//                try{
//                    GarbageEventFiles::insert($file_data);
//                }catch (\Exception $e){
//                    return response()->json(encodeMsg(["message" => "请先确认图片是否已经添加"],404), 404);
//                }
//
//            }
//            return response()->json(encodeMsg($data, 205), 205);
//        } catch (QueryException $e) {
//            return response()->json(["message" => "更新失败"], 500);
//        }
//    }

//    /**
//     * 信息删除
//     */
//    public function destroy($pk)
//    {
//        $data = GarbageEvent::find($pk);
//        if ($data == []) {
//            return response()->json(encodeMsg(["message" => "没有该信息信息", 204], 204));
//        }
//        $data->delete();
//        return response()->json(["message" => "删除成功"], 200);
//    }
}